/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import dao.CorrespondenciaDAO;
import dao.MoradorDAO;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import model.Correspondencia;
import model.Morador;

/**
 *
 * @author Wagner Segato dos Santos
 */

public class CorrespondenciaBean {

    // Atributos
    private Correspondencia correspondencia;
    private DataModel lista;

    public DataModel getLista() throws Exception {
        return new ListDataModel(CorrespondenciaDAO.getListaCorrespondencia());
    }

    /** Creates a new instance of UsuarioBean */
    public CorrespondenciaBean() throws Exception {
        this.correspondencia = new Correspondencia();
        this.lista = new ListDataModel(CorrespondenciaDAO.getListaCorrespondencia());
    }

    public Correspondencia getCorrespondencia() {
        return correspondencia;
    }

    public void setCorrespondencia(Correspondencia correspondencia) {
        this.correspondencia = correspondencia;
    }

    /** Preparar formulário para inserir dados no banco  */
    public String prepararInserir() {
        correspondencia = new Correspondencia();
        return "form?faces-redirect=true";
    }

    /** Preparar registro para atualizar os dados do banco */
    public String prepararAlterar() {
        if (correspondencia != null) {
            return "form?faces-redirect=true";
        } else {
            erro("Selecione um registro na tabela");
            return "list";
        }
    }

    /** Preparar registro para excluir os dados do banco */
    public String prepararExcluir() {
        if (correspondencia != null) {
            alerta("Deseja realmente excluir esse registro?");
            return "list";
        } else {
            correspondencia = new Correspondencia();
            erro("Selecione um registro na tabela");
            return "list";
        }
    }

    /** Excluir registro do banco */
    public String excluir() {
        try {
            if (correspondencia.getId() != null) {
                CorrespondenciaDAO.excluir(correspondencia);
                info("Sucesso ao excluir registro");
                this.lista = new ListDataModel(CorrespondenciaDAO.getListaCorrespondencia());
            }
            return "list";
        } catch (Exception e) {
            correspondencia = new Correspondencia();
            erro("Erro: " + e.getMessage());
            return "list";
        }
    }

    /** Salvar registro no banco */
    public String salvar() {
        try {
            if (correspondencia.getId() == null) {
                CorrespondenciaDAO.inserir(correspondencia);
                correspondencia = new Correspondencia(); // Limpa os dados do último objeto selecionado
            } else {
                CorrespondenciaDAO.atualizar(correspondencia);
                //correspondencia = selecionado; // Mantem os dados do último objeto selecionado
            }
            this.lista = new ListDataModel(CorrespondenciaDAO.getListaCorrespondencia()); // Atualiza a lista de correspondências
            info("Sucesso ao salvar registro");
            return "list?faces-redirect=true";
        } catch (Exception e) {
            erro("Não foi possível salvar registro: " + e.getMessage());
            return "form";
        }
    }

    /** Buscar (autocompletar) o nome do morador */
    public List<Morador> autoCompletar(String query) throws Exception {
        List<Morador> moradores = MoradorDAO.getListaMorador();
        List<Morador> results = new ArrayList<Morador>();

        for (int i = 0; i < moradores.size(); i++) {
            if (moradores.get(i).getNome().toUpperCase().contains(query.toUpperCase())) {
                results.add(moradores.get(i));
            }
        }

        return results;
    }

    /** Exibir mensagens no sistema */
    private static void exibirMsg(String summary, String detail, FacesMessage.Severity severity) {
        FacesMessage facesMessage = new FacesMessage(severity, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    }

    /** Preencher mensagem de informação */
    public static void info(String detail) {
        String summary = "";
        exibirMsg(summary, detail, FacesMessage.SEVERITY_INFO);
    }

    /** Preencher mensagem de erro */
    public static void erro(String detail) {
        String summary = "";
        exibirMsg(summary, detail, FacesMessage.SEVERITY_ERROR);
    }

    /** Preencher mensagem de alerta */
    public static void alerta(String detail) {
        String summary = "";
        exibirMsg(summary, detail, FacesMessage.SEVERITY_WARN);
    }
}
